; CyUku/src/tools/compiler.asm
; 编译器实现

section .text
global _start

_start:
    ; 参数检查
    cmp rdi, 3
    jl .usage
    
    ; 打开源文件
    mov rax, SYS_OPEN
    mov rdi, [rsi + 8]  ; 源文件名
    mov rsi, O_RDONLY
    syscall
    
    ; 创建目标文件
    mov rax, SYS_OPEN
    mov rdi, [rsi + 16] ; 目标文件名
    mov rsi, O_CREAT | O_WRONLY
    mov rdx, 0644o
    syscall
    
    ; 词法分析
    call init_scanner
    .token_loop:
        call next_token
        cmp [token_type], TOKEN_EOF
        je .parse
        
        ; 处理token
        jmp .token_loop
    
    ; 语法分析
    .parse:
        call parse_program
        test rax, rax
        js .error
    
    ; 代码生成
        call generate_code
    
    ; 写入文件
        mov rdi, [output_fd]
        mov rsi, bytecode
        mov rdx, [bytecode_size]
        mov rax, SYS_WRITE
        syscall
    
    ; 关闭文件
        mov rax, SYS_CLOSE
        mov rdi, [input_fd]
        syscall
        mov rax, SYS_CLOSE
        mov rdi, [output_fd]
        syscall
    
    ; 退出
        mov rax, SYS_EXIT
        xor rdi, rdi
        syscall

section .data
    input_fd dq 0
    output_fd dq 0
    bytecode times 4096 db 0
    bytecode_size dq 0